package org.example;

import org.example.controller.UserController;
import org.example.controller.UserController2;
import org.example.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainAnnotation {

    public static void main(String[] args) {
        //ApplicationContext是容器最顶级的接口，可以使用不同的实现类来创建
        //使用注解配置的方式: 指定扫描的包路径，包所在路径以下的类，如果有Spring支持的注解
        //就可以通过容器来管理bean对象（创建，组织依赖关系）
        //org.example.controller如果是扫描org1.example就找不到
        //存储键值对：键（bean的名称/id：类的首字母小写），value（类创建的实例对象）
        ApplicationContext ac = new AnnotationConfigApplicationContext(
                "org.example");

        UserController uc = (UserController) ac.getBean("userController");
        System.out.println(uc);
        //默认是单例的方式来创建对象：再从容器获取，检查是否是一个对象
        UserController uc2 = (UserController) ac.getBean("userController");
        System.out.println(uc == uc2);
        System.out.println(uc.getUserService());//打印userController对象中的userService属性
        System.out.println(uc.getUser());
        System.out.println(uc.getS1());

        UserService us = (UserService) ac.getBean("userService");
        System.out.println(us);

        User zhangsan = (User) ac.getBean("zhangsan");
        System.out.println(zhangsan);

        UserController2 ctl2 = (UserController2) ac.getBean("uc2");
        System.out.println(ctl2);

        User li4 = (User) ac.getBean("li4");
        System.out.println(li4);
    }
}
